#ifndef __TESTS_TEST1_COMPONENTS_IFACES_H__
#define __TESTS_TEST1_COMPONENTS_IFACES_H__

#include "../../include/ifaces_core.h"

#define TEST_IMESSAGEMGRIMPL "cb721e22-b1e5-4aea-9ce9-2df81670d3f1"
#define TEST_ITESTMSGMGRSERVICEIMPL "02904750-56bd-447e-8bca-46d6e7ca4c4d"
#define TEST_ITESTRECVSERVICEIMPL "2746efb3-62b9-43a2-8a20-6b2d91281c9e"

namespace Test
{

  using namespace Boss;

  struct IMessage
    : public IBase
  {
    BOSS_DECLARE_IFACE_UUID(1a5f32b1-d467-4dd8-92a2-4c5ca9df053c)

    virtual void BOSS_CALL_TYPE Set(unsigned long data) = 0;
    virtual unsigned long BOSS_CALL_TYPE Get() const = 0;
  };

  struct IReceiver
    : public IBase
  {
    BOSS_DECLARE_IFACE_UUID(dd37e510-dbbf-4adf-a1ba-41acc0d57769)

    virtual void BOSS_CALL_TYPE OnMsg(IMessage *msg) = 0;
  };

  struct IMessageMgr
    : public IBase
  {
    BOSS_DECLARE_IFACE_UUID(60b45346-de5c-47b1-acde-422b2ba85a0f)

    virtual TResult BOSS_CALL_TYPE Subscribe(IReceiver *receiver) = 0;
    virtual TResult BOSS_CALL_TYPE Unsubscribe(IReceiver *receiver) = 0;

    virtual TResult BOSS_CALL_TYPE SendMsg(IMessage *msg) = 0;
  };

  struct ITestService
    : public IBase
  {
    BOSS_DECLARE_IFACE_UUID(329b3966-be89-4fd7-b9a9-14d425ffc640)

    virtual TResult BOSS_CALL_TYPE Start() = 0;
    virtual TResult BOSS_CALL_TYPE Stop() = 0;
  };

  struct IWriter
    : public IBase
  {
    BOSS_DECLARE_IFACE_UUID(22fe00f6-f67f-4195-a9c6-174d4f6746b7)

    virtual void BOSS_CALL_TYPE Write(const char *str) = 0;
  };

}

#endif  // !__TESTS_TEST1_COMPONENTS_IFACES_H__
